import dayjs from 'dayjs'

/**
 * 导出blob
 * @param {*} blob 文件blob数据
 * @param {*} filename 文件名
 */
export function downloadBlob(blob: Blob, filename = '导出数据') {
  const url = window.URL.createObjectURL(blob)
  const link = document.createElement('a')
  link.href = url
  link.setAttribute('download', `${filename}.xlsx`) // 下载文件的名称及文件类型后缀
  document.body.append(link)
  link.click()
  link.remove() // 下载完成移除元素
  window.URL.revokeObjectURL(url) // 释放掉blob对象
}

/**
 * 导出
 * @param {any} res 回调请求数据
 * @param {string} filename 文件名
 */
export function downloadFile1(res: any, filename?: any) {
  const { headers } = res
  console.log(res.headers)
  // 响应头获取编码的文件名称
  if (!filename) {
    filename = decodeURI(
      headers['content-disposition'].split(';')[1].split('=')[1]
    )
  }
  // 该实例化的方式第一个参数必须是数组的格式
  const blob = new Blob([res], {
    type: 'application/vnd.ms-excel'
  })
  downloadBlob(blob, filename)
}

export const downloadByUrl = (url: string, query: any = {}) => {
  const aElement = document.createElement('a')
  for (const key in query) {
    if (key === 'filename') {
      aElement.setAttribute('download', query[key])
    } else {
      url += url?.indexOf('?') === -1 ? '?' : '&'
      url += `${key}=${query[key]}`
    }
  }
  aElement.setAttribute('href', url)
  aElement.click()
}

/**
 * 下载文件
 * @param {*} res axios下载返回的数据
 * @param {*} filename 文件名
 */
export const downloadFile = (res: any, filename = '') => {
  if (!filename) {
    if (res.headers && res.headers['content-disposition']) {
      // 响应头获取编码的文件名称
      filename = decodeURI(
        res.headers['content-disposition'].split(';')[1].split('=')[1]
      )
    } else {
      filename = dayjs().format('YYYYMMDDHHmmss')
    }
  }
  // 该实例化的方式第一个参数必须是数组的格式
  const blob = new Blob([res.data])

  const url = window.URL.createObjectURL(blob)
  downloadByUrl(url, {
    filename: decodeURI(filename)
  })
}
